package parte2;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */
public class Agenda {
	private Usuario usuario;

	private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
			"dd/MM/yyyy");
	private SimpleDateFormat simpleDateFormatAniversario = new SimpleDateFormat(
			"dd/MM");
	private SimpleDateFormat simpleTimeFormat = new SimpleDateFormat("HH:mm");
	private JFrame window = new JFrame("Agenda");
	private JPanel panelCriarEditarPerfil = null;
	private JPanel panelCriarEvento = null;
	private JPanel panelCriarContato = null;
	private JPanel panelMenuPrincipal = null;
	private JTabbedPane tabbedPaneMenu;
	private JLabel tituloCriarPerfil = null;
	private JLabel tituloCriarContato = null;
	private JLabel tituloCriarEvento = null;
	private JLabel labelNome = null;
	private JLabel labelTipo = null;
	private JTextField nome = null;
	private JTextField tipo = null;
	private JLabel labelDescricao = null;
	private JScrollPane scrollDescricao = null;
	private JScrollPane scrollEndereco = null;
	private JScrollPane scrollContatos = null;
	private JScrollPane scrollEventos = null;
	private JScrollPane scrollCriarEvento = null;
	private JTextArea descricao = null;
	private JMenu barMenuPerfil;
	private JMenuBar menu;
	private JTextArea endereco = null;
	private JLabel labelEmail = null;
	private JTextField email = null;
	private JButton botaoOk = null;
	private JButton botaoSair = null;
	private JButton botaoVoltar = null;
	private JSplitPane splitEventos1 = null;
	private JSplitPane splitContatos = null;
	private JPanel panelContatos = null;
	private JPanel panel2 = null;
	private JLabel labelEndereco = null;
	private JLabel labelDataAniversario = null;
	private JTextField dataAniversario = null;
	private JLabel labelDataInicio;
	private JTextField dataInicio;
	private JLabel labelDuracao;
	private JTextField duracao;
	private JButton botaoCriaContato;
	private Container panelEventos;
	private JLabel labelHoraInicio;
	private JTextField horaInicio;
	private JList listNomeEventos;
	private JTextArea perfilEvento;
	private JTextArea perfilContato;
	private JList listNomeContatos;
	private JMenu barMenuEventos;
	private JMenuItem menuItemCriarEvento;
	private JMenuItem menuItemCriarContato;
	private JMenuItem menuItemEditarPerfil;
	private JMenu barMenuContatos;
	private JPanel panelAddFormaDeContato;
	private JLabel tituloAddFormaDeContato;
	private JPanel panelSelecaoFormaDeContato;
	private JRadioButton tipoTelefone;
	private JMenuItem menuItemMenuPrincipal;
	private JRadioButton tipoEmail;
	private JRadioButton tipoOutro;
	private ButtonGroup tiposFormaDeContato;
	private JLabel labelNumero;
	private JTextField numero;
	private JLabel labelComentario;
	private JTextField comentario;
	private JPanel panelTelefone;
	private Contato contato;
	private FormaDeContato formaDeContato;
	private Evento evento;
	private JPanel panelEmail;
	private JTextField enderecoEmail;
	private JPanel panelOutro;
	private JTextField enderecoOutro;
	private JPanel panelScrollCriarEvento;
	private JPanel panelPerfilContato;
	private JSplitPane splitFormasDeContatos;
	private JPanel panelFormasDeContato;
	private JButton botaoFormasDeContato;
	private JButton botaoEditarContato;
	private JButton botaoRemoverContato;
	private JPanel panelEditarContato;
	private JLabel tituloEditarContato;
	private JLabel tituloFormasDeContato;
	private JList listNomeFormasDeContatos;
	private JTextArea perfilFormasDeContato;
	private JButton botaoEditarFormaDeContato;
	private JButton botaoRemoverFormaDeContato;
	private JPanel panelPerfilFormasDeContato;
	private JScrollPane scrollFormasDeContato;
	private JButton botaoCriaFormasDeContato;
	private JPanel panelFormasDeContato1;
	private JButton botaoNovoContato;
	private JPanel panelPerfilEvento1;
	private JButton botaoAnotacoes1;
	private JButton botaoRemoverEvento1;
	private JButton botaoNovoEvento1;
	private JButton botaoEditarEvento1;
	private JPanel panelEditarEvento;
	private Component tituloEditarEvento;
	private JPanel panelScrollEditarEvento;
	private JScrollPane scrollEditarEvento;
	private JButton botaoRelacionarContatos1;
	private JPanel panelRelacionaContatos;
	private JPanel panelContatosRelacionados;
	private JPanel panelPesquisaContatos;
	private JSplitPane splitContatosRelacionado;
	private JList listContatosRelacionados;
	private JButton botaoRemoverDoEvento;
	private JList listContatosPesquisados;
	private JSplitPane splitContatosPesquisados;
	private JButton botaoRelacionarContato;
	private JLabel tituloRelacionaContatos;
	private JScrollPane scrollContatosPesquisados;
	private JScrollPane scrollContatosRelacionados;
	private Contato contatoRelacionado;
	private JPanel panelAddAnotacao;
	private JPanel panelSelecaoAnotacao;
	private JRadioButton tipoAudio;
	private Component tituloAddAnotacao;
	private ButtonGroup tiposAnotacao;
	private AbstractButton tipoImagem;
	private AbstractButton tipoTexto;

	private JButton botaoAnotacoes2;

	private JButton botaoRelacionarContatos2;

	private JButton botaoEditarEvento2;

	private JButton botaoRemoverEvento2;

	private JButton botaoNovoEvento2;

	private Container panelPerfilEvento2;

	private JSplitPane splitEventos2;

	private JPanel panelEditarFormaDeContato;

	private JLabel tituloEditarFormaDeContato;

	public Agenda() {
		executaSistema();
	}

	public static void main(String[] args) {
		new Agenda();
	}

	private void executaSistema() {
		inicio();
	}

	private void inicio() {
		window.setVisible(true);
		window.setFont(new java.awt.Font("Dialog", 0, 16));
		window.getContentPane().setLayout(null);
		window.pack();
		// window.setPreferredSize(new java.awt.Dimension(452, 390));

		window.setSize(452, 390);

		menu = new JMenuBar();
		window.setJMenuBar(menu);
		menu.setBounds(0, 0, 116, 27);
		menu.add(getMenuPerfil());
		menu.add(getMenuContatos());
		menu.add(getMenuEventos());
		try {
			FileInputStream fi = new FileInputStream("Usuario.dat");
			ObjectInputStream oi = new ObjectInputStream(fi);
			usuario = (Usuario) oi.readObject();
			oi.close();
		} catch (Exception e) {
			menuCriarPerfil();
		}
		menuPrincipal();

	}

	private void criarPerfil() {
		criaEditaPerfil();
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					criaUsuario(nome.getText(), descricao.getText(),
							email.getText());
					window.remove(panelCriarEditarPerfil);
					window.repaint();
					// menuPrincipal();
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, e.getMessage());
					menuCriarPerfil();
				}
				menuPrincipal();
			}

		});
		botaoSair.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				int option = JOptionPane.showConfirmDialog(null,
						"Deseja encerrar a aplicação?", "Fechar programa",
						JOptionPane.OK_CANCEL_OPTION);
				if (option == JOptionPane.OK_OPTION)
					System.exit(0);
			}
		});

	}

	private void editarPerfil() {
		criaEditaPerfil();
		tituloCriarPerfil.setText("EDITAR PERFIL");
		nome.setText(usuario.getNome());
		descricao.setText(usuario.getDescricao());
		email.setText(usuario.getEmail());
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					usuario.setNome(nome.getText());
					usuario.setDescricao(descricao.getText());
					usuario.setEmail(email.getText());
					window.remove(panelCriarEditarPerfil);
					window.repaint();
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, e.getMessage());
					editarPerfil();
				}
				menuPrincipal();
			}
		});
		botaoSair.setText("Voltar");
		botaoSair.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				window.remove(panelCriarEditarPerfil);
				window.repaint();
				menuPrincipal();
			}
		});

	}

	private void menuEditarPerfil() {
		editarPerfil();
		panelCriarEditarPerfil();
	}

	private void criaEditaPerfil() {
		panelCriarEditarPerfil = new JPanel(null);

		tituloCriarPerfil = new JLabel("CRIAR NOVO PERFIL");
		tituloCriarPerfil.setBounds(110, 8, 193, 28);
		tituloCriarPerfil.setFont(new java.awt.Font("Segoe UI", 0, 16));

		labelNome = new JLabel("Nome");
		labelNome.setBounds(12, 47, 66, 16);
		nome = new JTextField();
		nome.setBounds(12, 69, 244, 23);

		labelDescricao = new JLabel("Descrição");
		labelDescricao.setBounds(12, 104, 98, 18);

		descricao = new JTextArea();
		descricao.setLineWrap(true);
		descricao.setWrapStyleWord(true);
		scrollDescricao = new JScrollPane(descricao);
		scrollDescricao.setBounds(12, 128, 388, 65);
		scrollDescricao
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		labelEmail = new JLabel("E-mail");
		labelEmail.setBounds(13, 199, 66, 19);
		email = new JTextField();
		email.setBounds(12, 224, 248, 20);

		botaoOk = new JButton("Ok");
		botaoOk.setBounds(248, 261, 55, 23);
		botaoSair = new JButton("Sair");
		botaoSair.setBounds(308, 261, 91, 23);

		panelCriarEditarPerfil.setLayout(null);

		panelCriarEditarPerfil.setSize(436, 334);
		panelCriarEditarPerfil
				.setPreferredSize(new java.awt.Dimension(436, 334));
		panelCriarEditarPerfil.setBounds(0, 0, 420, 324);

	}

	private void menuCriarPerfil() {
		menu.setEnabled(false);
		menu.setVisible(false);
		criarPerfil();
		panelCriarEditarPerfil();
	}

	private void panelCriarEditarPerfil() {
		panelCriarEditarPerfil.add(tituloCriarPerfil);
		panelCriarEditarPerfil.add(labelNome);
		panelCriarEditarPerfil.add(nome);
		panelCriarEditarPerfil.add(labelDescricao);
		panelCriarEditarPerfil.add(scrollDescricao);
		panelCriarEditarPerfil.add(labelEmail);
		panelCriarEditarPerfil.add(email);
		panelCriarEditarPerfil.add(botaoOk);
		panelCriarEditarPerfil.add(botaoSair);

		window.add(panelCriarEditarPerfil);
		redimensionaJanela();
		window.repaint();
	}

	private void criaUsuario(String nome, String descricao, String email)
			throws Exception {
		usuario = new Usuario(nome, descricao, email);
	}

	private void menuPrincipal() {
		menu.setEnabled(true);
		menu.setVisible(true);

		String dadosPerfil = "Nome:\n" + usuario.getNome() + "\n\nDescrição:\n"
				+ usuario.getDescricao() + "\n\nE-mail:\n" + usuario.getEmail();
		panelMenuPrincipal = new JPanel(null);

		JLabel saudacao = new JLabel("Oi, " + usuario.getNome() + "!");
		saudacao.setBounds(9, 12, 184, 30);
		saudacao.setFont(new java.awt.Font("Segoe UI", 0, 16));

		panelMenuPrincipal.add(saudacao);
		saudacao.setBounds(12, 12, 396, 26);

		JTextArea perfil = new JTextArea(dadosPerfil);
		perfil.setEditable(false);
		JScrollPane scrollPerfil = new JScrollPane(perfil);
		perfil.setLineWrap(true);
		perfil.setWrapStyleWord(true);

		botaoSair = new JButton("Sair");
		botaoSair.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				int option = JOptionPane.showConfirmDialog(null,
						"Deseja encerrar a aplicação?", "Fechar programa",
						JOptionPane.OK_CANCEL_OPTION);
				if (option == JOptionPane.OK_OPTION) {
					finalizacao();
					System.exit(0);
				}

			}
		});

		tabbedPaneMenu = new JTabbedPane();
		panelMenuPrincipal.add(tabbedPaneMenu);
		tabbedPaneMenu.setBounds(12, 44, 404, 249);
		tabbedPaneMenu.addTab("Perfil", scrollPerfil);

		tabbedPaneMenu.addTab("Contatos", tabContatos());
		tabbedPaneMenu.addTab("Eventos Passados", tabEventosPassados());
		tabbedPaneMenu.addTab("Eventos Futuros", tabEventosFuturos());

		panelMenuPrincipal.setSize(436, 334);
		panelMenuPrincipal.setPreferredSize(new java.awt.Dimension(420, 269));
		panelMenuPrincipal.add(botaoSair);
		botaoSair.setBounds(328, 296, 72, 22);

		window.add(panelMenuPrincipal);
		panelMenuPrincipal.setLayout(null);
		panelMenuPrincipal.setBounds(0, 0, 436, 334);
		window.repaint();

	}

	private Component tabEventosFuturos() {
		panelEventos = new JPanel(null);
		if (usuario.getEventosFuturos().size() == 0) {
			semEventos();
		} else {
			String[] arrayEventos = getNomesEventosFuturos();
			listNomeEventos = new JList(arrayEventos);
			listNomeEventos.setSelectedIndex(0);
			listNomeEventos
					.addListSelectionListener(new ListSelectionListener() {

						@Override
						public void valueChanged(ListSelectionEvent e) {
							// JList list = (JList) e.getSource();
							atualizaPerfilEvento((String) listNomeEventos
									.getSelectedValue());
						}
					});

			JScrollPane scrollNomesEventos = new JScrollPane(listNomeEventos);

			perfilEvento = new JTextArea();
			JScrollPane scrollPerfilEvento = new JScrollPane(perfilEvento);

			botaoAnotacoes1 = new JButton("Anotações");
			botaoRelacionarContatos1 = new JButton("Relacionar Contatos");
			botaoEditarEvento1 = new JButton("Editar");
			botaoRemoverEvento1 = new JButton("Remover");
			botaoNovoEvento1 = new JButton("Novo Evento");

			botaoAnotacoes1.addActionListener(actionListener3());
			botaoRelacionarContatos1.addActionListener(actionListener3());
			botaoEditarEvento1.addActionListener(actionListener3());
			botaoRemoverEvento1.addActionListener(actionListener3());
			botaoNovoEvento1.addActionListener(actionListener3());

			panelPerfilEvento1 = new JPanel(null);
			panelPerfilEvento1.setLayout(null);

			panelPerfilEvento1.add(scrollPerfilEvento);
			panelPerfilEvento1.add(botaoAnotacoes1);
			botaoAnotacoes1.setBounds(0, 109, 104, 20);
			panelPerfilEvento1.add(botaoRelacionarContatos1);
			botaoRelacionarContatos1.setBounds(0, 135, 167, 19);
			panelPerfilEvento1.add(botaoEditarEvento1);
			botaoEditarEvento1.setBounds(0, 162, 113, 18);
			panelPerfilEvento1.add(botaoRemoverEvento1);
			botaoRemoverEvento1.setBounds(115, 162, 113, 18);
			panelPerfilEvento1.add(botaoNovoEvento1);
			botaoNovoEvento1.setBounds(0, 189, 121, 19);
			scrollPerfilEvento.setBounds(0, 0, 237, 101);

			splitEventos1 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
					scrollNomesEventos, panelPerfilEvento1);
			splitEventos1.setBounds(0, 0, 396, 218);
			splitEventos1.setDividerLocation(150);
			splitEventos1.setOneTouchExpandable(true);
			panelEventos.removeAll();
			panelEventos.setSize(436, 334);
			panelEventos.setLayout(null);
			panelEventos.add(splitEventos1);
			scrollEventos = new JScrollPane(panelEventos);
			atualizaPerfilEvento((String) listNomeEventos.getSelectedValue());
		}
		window.repaint();
		return scrollEventos;
	}

	private Component tabEventosPassados() {
		panelEventos = new JPanel(null);
		if (usuario.getEventosPassados().size() == 0) {
			semEventos();
		} else {
			String[] arrayEventos = getNomesEventosPassados();
			listNomeEventos = new JList(arrayEventos);
			listNomeEventos.setSelectedIndex(0);
			listNomeEventos
					.addListSelectionListener(new ListSelectionListener() {

						@Override
						public void valueChanged(ListSelectionEvent e) {
							// JList list = (JList) e.getSource();
							atualizaPerfilEvento((String) listNomeEventos
									.getSelectedValue());
						}
					});

			JScrollPane scrollNomesEventos = new JScrollPane(listNomeEventos);

			perfilEvento = new JTextArea();
			JScrollPane scrollPerfilEvento = new JScrollPane(perfilEvento);

			botaoAnotacoes2 = new JButton("Anotações");
			botaoRelacionarContatos2 = new JButton("Relacionar Contatos");
			botaoEditarEvento2 = new JButton("Editar");
			botaoRemoverEvento2 = new JButton("Remover");
			botaoNovoEvento2 = new JButton("Novo Evento");

			botaoAnotacoes2.addActionListener(actionListener3());
			botaoRelacionarContatos2.addActionListener(actionListener3());
			botaoEditarEvento2.addActionListener(actionListener3());
			botaoRemoverEvento2.addActionListener(actionListener3());
			botaoNovoEvento2.addActionListener(actionListener3());

			panelPerfilEvento2 = new JPanel(null);
			panelPerfilEvento2.setLayout(null);

			panelPerfilEvento2.add(scrollPerfilEvento);
			panelPerfilEvento2.add(botaoAnotacoes2);
			botaoAnotacoes2.setBounds(0, 109, 104, 20);
			panelPerfilEvento2.add(botaoRelacionarContatos2);
			botaoRelacionarContatos2.setBounds(0, 135, 167, 19);
			panelPerfilEvento2.add(botaoEditarEvento2);
			botaoEditarEvento2.setBounds(0, 162, 113, 18);
			panelPerfilEvento2.add(botaoRemoverEvento2);
			botaoRemoverEvento2.setBounds(115, 162, 113, 18);
			panelPerfilEvento2.add(botaoNovoEvento2);
			botaoNovoEvento2.setBounds(0, 189, 121, 19);
			scrollPerfilEvento.setBounds(0, 0, 237, 101);

			splitEventos2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
					scrollNomesEventos, panelPerfilEvento2);
			splitEventos2.setBounds(0, 0, 396, 218);
			splitEventos2.setDividerLocation(150);
			splitEventos2.setOneTouchExpandable(true);
			panelEventos.removeAll();
			panelEventos.setSize(436, 334);
			panelEventos.setLayout(null);
			panelEventos.add(splitEventos2);
			scrollEventos = new JScrollPane(panelEventos);
			atualizaPerfilEvento((String) listNomeEventos.getSelectedValue());
		}
		window.repaint();
		return scrollEventos;
	}

	private void semEventos() {
		panel2 = new JPanel(null);
		panel2.setSize(379, 199);
		JLabel msg = new JLabel("Você ainda não tem nenhum evento!");
		msg.setBounds(0, 0, 379, 31);
		JButton botaoCriaEvento = new JButton("Adicionar Evento");
		botaoCriaEvento.setBounds(178, 43, 195, 30);
		panel2.add(msg);
		panel2.add(botaoCriaEvento);

		botaoCriaEvento.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				window.remove(panelMenuPrincipal);
				window.repaint();
				criaEvento();
			}
		});
		scrollEventos = new JScrollPane(panel2);
	}

	private void atualizaPerfilEvento(String nomeEvento) {
		Evento evento = null;
		for (Evento e : usuario.getEventos()) {
			if (e.getNome().equals(nomeEvento))
				evento = e;
		}
		if (evento != null) {
			perfilEvento.setText(perfilEvento((Evento) evento));
		} else {
			perfilEvento.setText("ERRO - Evento não encontrado");
		}
		perfilEvento.setEditable(false);
		window.repaint();
	}

	private String perfilEvento(Evento evento) {
		return "Nome:\n" + evento.getNome() + "\n\nTipo:\n" + evento.getTipo()
				+ "\n\nDescrição:\n" + evento.getDescricao()
				+ "\n\nData/Hora Inicial:\n"
				+ getDataFormatada(evento.getDataInicial().getTime()) + " - "
				+ getHoraFormatada(evento.getDataInicial().getTime())
				+ "\n\nData/Hora Final:\n"
				+ getDataFormatada(evento.getDataFinal().getTime()) + " - "
				+ getHoraFormatada(evento.getDataFinal().getTime());
	}

	private String[] getNomesEventosPassados() {
		String[] nomesEventosPassados = new String[usuario.getEventosPassados()
				.size()];
		for (int i = 0; i < usuario.getEventosPassados().size(); i++) {
			nomesEventosPassados[i] = usuario.getEventosPassados().get(i)
					.getNome();
		}
		return nomesEventosPassados;
	}

	private String[] getNomesEventosFuturos() {
		String[] nomesEventosFuturos = new String[usuario.getEventosFuturos()
				.size()];
		for (int i = 0; i < usuario.getEventosFuturos().size(); i++) {
			nomesEventosFuturos[i] = usuario.getEventosFuturos().get(i)
					.getNome();
		}
		return nomesEventosFuturos;
	}

	private void criaEvento() {
		panelCriarEvento = new JPanel(null);
		panelCriarEvento.setLayout(null);
		panelCriarEvento.setBounds(0, 0, 420, 323);

		tituloCriarEvento = new JLabel("CRIAR NOVO EVENTO");
		tituloCriarEvento.setBounds(110, 8, 193, 28);
		tituloCriarEvento.setFont(new java.awt.Font("Segoe UI", 0, 16));

		labelNome = new JLabel("Nome");
		labelNome.setBounds(12, 12, 50, 24);
		nome = new JTextField();
		nome.setBounds(12, 36, 236, 27);

		labelTipo = new JLabel("Tipo");
		labelTipo.setBounds(256, 12, 87, 25);

		tipo = new JTextField();
		tipo.setBounds(257, 36, 143, 26);

		labelDataInicio = new JLabel("Data de início (formato: DD/MM/AAAA)");
		labelDataInicio.setBounds(12, 159, 244, 23);

		labelHoraInicio = new JLabel("Hora de início (formato: HH:MM");
		labelHoraInicio.setBounds(12, 215, 247, 25);

		horaInicio = new JTextField();
		horaInicio.setBounds(12, 251, 132, 27);

		dataInicio = new JTextField();
		dataInicio.setBounds(12, 188, 150, 21);

		labelDuracao = new JLabel("Duração (formato: HH:MM)");
		labelDuracao.setBounds(15, 289, 200, 24);

		duracao = new JTextField();
		duracao.setBounds(12, 322, 118, 26);

		labelDescricao = new JLabel("Descrição");
		labelDescricao.setBounds(12, 75, 144, 21);

		descricao = new JTextArea();
		descricao.setLineWrap(true);
		descricao.setWrapStyleWord(true);
		scrollDescricao = new JScrollPane(descricao);
		scrollDescricao.setBounds(12, 102, 387, 51);
		scrollDescricao
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		botaoOk = new JButton("Ok");
		botaoOk.setBounds(237, 363, 73, 26);
		botaoVoltar = new JButton("Voltar");
		botaoVoltar.setBounds(320, 363, 96, 24);
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				if (addEvento()) {
					window.remove(panelCriarEvento);
					window.repaint();
					menuPrincipal();
				}
			}
		});

		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				window.remove(panelCriarEvento);
				window.repaint();
				menuPrincipal();

			}
		});

		menuCriaEvento();
		redimensionaJanela();
		window.repaint();
	}

	private Evento getEvento(String nomeEvento) {
		Evento evento = null;
		for (Evento e : usuario.getEventos()) {
			if (e.getNome().equals(nomeEvento))
				evento = e;
		}
		return evento;
	}

	private boolean addEvento() {
		try {
			String nome = this.nome.getText();
			String tipo = this.tipo.getText();
			String descricao = this.descricao.getText();
			String[] dataInicio = this.dataInicio.getText().split("/");
			String[] horaInicio = this.horaInicio.getText().split(":");
			String duracao = this.duracao.getText() + ":00";
			Evento evento = new Evento(nome, Integer.parseInt(dataInicio[0]),
					Integer.parseInt(dataInicio[1]),
					Integer.parseInt(dataInicio[2]),
					Integer.parseInt(horaInicio[0]),
					Integer.parseInt(horaInicio[1]), duracao, descricao, tipo);
			usuario.addEvento(evento);
			return true;
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Entrada inválida", "Erro", 0);
			return false;
		}
	}

	private void editarEvento() {
		panelEditarEvento = new JPanel(null);
		panelEditarEvento.setLayout(null);
		panelEditarEvento.setBounds(0, 0, 420, 323);

		tituloEditarEvento = new JLabel("EDITAR EVENTO");
		tituloEditarEvento.setBounds(110, 8, 193, 28);
		tituloEditarEvento.setFont(new java.awt.Font("Segoe UI", 0, 16));

		labelNome = new JLabel("Nome");
		labelNome.setBounds(12, 12, 50, 24);
		nome = new JTextField(evento.getNome());
		nome.setBounds(12, 36, 236, 27);

		labelTipo = new JLabel("Tipo");
		labelTipo.setBounds(256, 12, 87, 25);

		tipo = new JTextField(evento.getTipo());
		tipo.setBounds(257, 36, 143, 26);

		labelDataInicio = new JLabel("Data de início (formato: DD/MM/AAAA)");
		labelDataInicio.setBounds(12, 159, 244, 23);

		labelHoraInicio = new JLabel("Hora de início (formato: HH:MM");
		labelHoraInicio.setBounds(12, 215, 247, 25);

		horaInicio = new JTextField(getHoraFormatada(evento.getDataInicial()
				.getTime()));
		horaInicio.setBounds(12, 251, 132, 27);

		dataInicio = new JTextField(getDataFormatada(evento.getDataInicial()
				.getTime()));
		dataInicio.setBounds(12, 188, 150, 21);

		labelDuracao = new JLabel("Duração (formato: HH:MM)");
		labelDuracao.setBounds(15, 289, 200, 24);

		duracao = new JTextField(getHoraFormatada(evento.getDuracao()));
		duracao.setBounds(12, 322, 118, 26);

		labelDescricao = new JLabel("Descrição");
		labelDescricao.setBounds(12, 75, 144, 21);

		descricao = new JTextArea(evento.getDescricao());
		descricao.setLineWrap(true);
		descricao.setWrapStyleWord(true);
		scrollDescricao = new JScrollPane(descricao);
		scrollDescricao.setBounds(12, 102, 387, 51);
		scrollDescricao
				.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		botaoOk = new JButton("Ok");
		botaoOk.setBounds(237, 363, 73, 26);
		botaoVoltar = new JButton("Voltar");
		botaoVoltar.setBounds(320, 363, 96, 24);
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					evento.setNome(nome.getText());
					evento.setTipo(tipo.getText());
					evento.setDescricao(descricao.getText());
					evento.setData(
							Integer.parseInt(dataInicio.getText().split("/")[0]),
							Integer.parseInt(dataInicio.getText().split("/")[1]),
							Integer.parseInt(dataInicio.getText().split("/")[2]),
							Integer.parseInt(horaInicio.getText().split(":")[0]),
							Integer.parseInt(horaInicio.getText().split(":")[1]));
					evento.setDuracao(duracao.getText() + ":00");
					removePanels();
					window.repaint();
					menuPrincipal();
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Entrada inválida",
							"Erro", 0);
					editarEvento();
				}
			}
		});

		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				window.remove(panelEditarEvento);
				window.repaint();
				menuPrincipal();

			}
		});

		removePanels();
		menuEditaEvento();
		window.repaint();
	}

	private void menuEditaEvento() {
		panelScrollEditarEvento = new JPanel(null);
		panelScrollEditarEvento.setPreferredSize(new java.awt.Dimension(419,
				388));
		panelScrollEditarEvento.setLayout(null);

		panelScrollEditarEvento.add(labelNome);
		panelScrollEditarEvento.add(nome);
		panelScrollEditarEvento.add(labelTipo);
		panelScrollEditarEvento.add(tipo);
		panelScrollEditarEvento.add(labelDataInicio);
		panelScrollEditarEvento.add(labelHoraInicio);
		panelScrollEditarEvento.add(horaInicio);
		panelScrollEditarEvento.add(dataInicio);
		panelScrollEditarEvento.add(labelDuracao);
		panelScrollEditarEvento.add(duracao);
		panelScrollEditarEvento.add(labelDescricao);
		panelScrollEditarEvento.add(scrollDescricao);
		panelScrollEditarEvento.add(botaoOk);
		panelScrollEditarEvento.add(botaoVoltar);

		scrollEditarEvento = new JScrollPane(panelScrollEditarEvento);
		scrollEditarEvento.setBounds(0, 44, 420, 262);

		panelEditarEvento.add(tituloEditarEvento);
		panelEditarEvento.add(scrollEditarEvento);

		window.add(panelEditarEvento);

		window.repaint();
	}

	private void menuCriaEvento() {
		panelScrollCriarEvento = new JPanel(null);
		panelScrollCriarEvento
				.setPreferredSize(new java.awt.Dimension(419, 388));
		panelScrollCriarEvento.setLayout(null);

		panelScrollCriarEvento.add(labelNome);
		panelScrollCriarEvento.add(nome);
		panelScrollCriarEvento.add(labelTipo);
		panelScrollCriarEvento.add(tipo);
		panelScrollCriarEvento.add(labelDataInicio);
		panelScrollCriarEvento.add(labelHoraInicio);
		panelScrollCriarEvento.add(horaInicio);
		panelScrollCriarEvento.add(dataInicio);
		panelScrollCriarEvento.add(labelDuracao);
		panelScrollCriarEvento.add(duracao);
		panelScrollCriarEvento.add(labelDescricao);
		panelScrollCriarEvento.add(scrollDescricao);
		panelScrollCriarEvento.add(botaoOk);
		panelScrollCriarEvento.add(botaoVoltar);
		// panelScrollCriarEvento.repaint();

		scrollCriarEvento = new JScrollPane(panelScrollCriarEvento);
		scrollCriarEvento.setBounds(0, 44, 420, 262);
		// scrollCriarEvento.repaint();

		panelCriarEvento.add(tituloCriarEvento);
		panelCriarEvento.add(scrollCriarEvento);
		// panelCriarEvento.repaint();
		window.add(panelCriarEvento);

		window.repaint();
	}

	private Component tabContatos() {
		panelContatos = new JPanel(null);
		if (usuario.getContatos().size() != 0) {
			String[] arrayContatos = getNomesContatos();
			listNomeContatos = new JList(arrayContatos);
			listNomeContatos.setSelectedIndex(0);
			listNomeContatos
					.addListSelectionListener(new ListSelectionListener() {

						@Override
						public void valueChanged(ListSelectionEvent e) {
							// JList list = (JList) e.getSource();
							atualizaPerfilContato((String) listNomeContatos
									.getSelectedValue());
						}
					});

			JScrollPane scrollNomesContatos = new JScrollPane(listNomeContatos);

			perfilContato = new JTextArea();
			JScrollPane scrollPerfilContato = new JScrollPane(perfilContato);

			botaoFormasDeContato = new JButton("Formas De Contato");
			botaoEditarContato = new JButton("Editar");
			botaoRemoverContato = new JButton("Remover");
			botaoNovoContato = new JButton("Novo Contato");

			botaoFormasDeContato.addActionListener(actionListener3());
			botaoEditarContato.addActionListener(actionListener3());
			botaoRemoverContato.addActionListener(actionListener3());
			botaoNovoContato.addActionListener(actionListener3());

			panelPerfilContato = new JPanel(null);
			panelPerfilContato.setLayout(null);

			panelPerfilContato.add(scrollPerfilContato);
			panelPerfilContato.add(botaoFormasDeContato);
			botaoFormasDeContato.setBounds(0, 113, 152, 28);
			panelPerfilContato.add(botaoEditarContato);
			botaoEditarContato.setBounds(0, 146, 104, 26);
			panelPerfilContato.add(botaoRemoverContato);
			botaoRemoverContato.setBounds(115, 146, 113, 26);
			panelPerfilContato.add(botaoNovoContato);
			botaoNovoContato.setBounds(0, 177, 121, 26);
			scrollPerfilContato.setBounds(0, 0, 237, 101);

			splitContatos = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
					scrollNomesContatos, panelPerfilContato);
			splitContatos.setBounds(1, 0, 395, 216);
			splitContatos.setDividerLocation(150);
			splitContatos.setOneTouchExpandable(true);
			panelContatos.removeAll();
			panelContatos.setSize(436, 334);
			panelContatos.setLayout(null);
			panelContatos.add(splitContatos);
			scrollContatos = new JScrollPane(panelContatos);
			atualizaPerfilContato((String) listNomeContatos.getSelectedValue());
		}

		else {
			panelContatos.setSize(379, 199);
			JLabel msg = new JLabel("Você ainda não tem nenhum contato!");
			msg.setBounds(0, 0, 379, 31);
			botaoCriaContato = new JButton("Adicionar Contato");
			botaoCriaContato.setBounds(178, 43, 195, 30);
			botaoCriaContato.addMouseListener(new MouseListener() {

				@Override
				public void mouseReleased(MouseEvent e) {
				}

				@Override
				public void mousePressed(MouseEvent e) {
				}

				@Override
				public void mouseExited(MouseEvent e) {
				}

				@Override
				public void mouseEntered(MouseEvent e) {
				}

				@Override
				public void mouseClicked(MouseEvent arg0) {
					window.remove(panelMenuPrincipal);
					window.repaint();
					criaContato();

				}
			});
			panelContatos.add(msg);
			panelContatos.add(botaoCriaContato);
			scrollContatos = new JScrollPane(panelContatos);

		}
		window.repaint();
		return scrollContatos;
	}

	private ActionListener actionListener3() {
		return new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					contato = getContato((String) listNomeContatos
							.getSelectedValue());
				} catch (Exception ex) {
					contato = null;
				}
				try {
					evento = getEvento((String) listNomeEventos
							.getSelectedValue());
				} catch (Exception ex) {
					evento = null;
				}
				if (e.getSource() == botaoRemoverContato) {
					usuario.removeContato(contato);
					removePanels();
					menuPrincipal();
				}
				if (e.getSource() == botaoEditarContato) {
					editarContato();
				}
				if (e.getSource() == botaoFormasDeContato)
					formasDeContato();
				if (e.getSource() == botaoNovoContato) {
					removePanels();
					criaContato();
				}
				if (e.getSource() == botaoRemoverEvento1
						|| e.getSource() == botaoRemoverEvento2) {
					usuario.removeEvento(evento);
					removePanels();
					menuPrincipal();
				}
				if (e.getSource() == botaoEditarEvento1
						|| e.getSource() == botaoEditarEvento2) {
					editarEvento();
				}
				if (e.getSource() == botaoNovoEvento1
						|| e.getSource() == botaoNovoEvento2) {
					removePanels();
					criaEvento();
				}
				if (e.getSource() == botaoRelacionarContatos1
						|| e.getSource() == botaoRelacionarContatos2) {
					removePanels();
					relacionaContatos();
				}
				if (e.getSource() == botaoAnotacoes1
						|| e.getSource() == botaoAnotacoes2) {
					removePanels();
					anotacoes();
				}
			}
		};
	}

	private void anotacoes() {
		panelAddAnotacao = new JPanel(null);

		tituloAddAnotacao = new JLabel("ADICIONAR ANOTAÇÃO");
		tituloAddAnotacao.setFont(new java.awt.Font("Segoe UI", 0, 16));

		panelSelecaoAnotacao = new JPanel(null);
		panelSelecaoAnotacao.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createTitledBorder("Tipo"),
				BorderFactory.createEmptyBorder(5, 5, 5, 5)));

		tipoAudio = new JRadioButton("Áudio");
		tipoAudio.setActionCommand("Áudio");
		tipoAudio.addActionListener(actionListener2());

		tipoImagem = new JRadioButton("Imagem");
		tipoImagem.setActionCommand("Imagem");
		tipoImagem.addActionListener(actionListener2());

		tipoTexto = new JRadioButton("Texto");
		tipoTexto.setActionCommand("Texto");
		tipoTexto.addActionListener(actionListener2());

		tiposAnotacao = new ButtonGroup();
		tiposAnotacao.add(tipoAudio);
		tiposAnotacao.add(tipoImagem);
		tiposAnotacao.add(tipoTexto);

		panelSelecaoAnotacao.add(tipoAudio);
		tipoAudio.setBounds(22, 23, 110, 18);
		panelSelecaoAnotacao.add(tipoImagem);
		tipoImagem.setBounds(132, 23, 116, 18);
		panelSelecaoAnotacao.add(tipoTexto);
		tipoTexto.setBounds(253, 23, 116, 18);

		panelAddAnotacao.add(panelSelecaoAnotacao);
		panelSelecaoAnotacao.setBounds(12, 71, 411, 51);
		panelSelecaoAnotacao.setLayout(null);
		panelAddAnotacao.add(tituloAddAnotacao);
		tituloAddAnotacao.setBounds(31, 12, 380, 37);

		window.add(panelAddAnotacao);
		panelAddAnotacao.setBounds(0, 0, 435, 328);
		panelAddAnotacao.setLayout(null);
		window.repaint();
	}

	private void relacionaContatos() {
		panelRelacionaContatos = new JPanel(null);
		panelContatosRelacionados = new JPanel(null);
		panelPesquisaContatos = new JPanel(null);
		tituloRelacionaContatos = new JLabel("RELACIONAR CONTATOS");
		tituloRelacionaContatos.setBounds(110, 8, 193, 28);
		tituloRelacionaContatos.setFont(new java.awt.Font("Segoe UI", 0, 16));
		botaoVoltar = new JButton("Voltar");
		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				removePanels();
				menuPrincipal();

			}
		});

		panelContatosRelacionados();

		panelPesquisaContato();

		panelPesquisaContatos.setBounds(12, 152, 400, 139);
		panelPesquisaContatos.setLayout(null);
		panelRelacionaContatos.add(tituloRelacionaContatos);
		panelRelacionaContatos.add(botaoVoltar);
		botaoVoltar.setBounds(319, 297, 95, 23);

		atualizaRelacionaContato((String) listContatosRelacionados
				.getSelectedValue());

		removePanels();
		window.add(panelRelacionaContatos);
		panelRelacionaContatos.setBounds(0, 0, 436, 325);
		panelRelacionaContatos.setLayout(null);
		window.repaint();
	}

	private void panelContatosRelacionados() {
		listContatosRelacionados = new JList(contatosRelacionados());
		listContatosRelacionados
				.addListSelectionListener(new ListSelectionListener() {

					@Override
					public void valueChanged(ListSelectionEvent e) {
						atualizaRelacionaContato((String) listContatosRelacionados
								.getSelectedValue());
					}
				});
		botaoRemoverDoEvento = new JButton("Remover do Evento");
		botaoRemoverDoEvento.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				if (evento.removeContato(contatoRelacionado)) {
					removePanels();
					relacionaContatos();
				}
			}
		});
		scrollContatosRelacionados = new JScrollPane(listContatosRelacionados);

		splitContatosRelacionado = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				scrollContatosRelacionados, botaoRemoverDoEvento);
		splitContatosRelacionado.setDividerLocation(250);
		panelContatosRelacionados
				.setBorder(BorderFactory.createCompoundBorder(
						BorderFactory
								.createTitledBorder("Contatos já relacionados ao evento"),
						BorderFactory.createEmptyBorder(5, 5, 5, 5)));
		panelContatosRelacionados.add(splitContatosRelacionado);
		splitContatosRelacionado.setBounds(10, 18, 379, 80);

		panelRelacionaContatos.add(panelContatosRelacionados);
		panelContatosRelacionados.setBounds(12, 39, 401, 111);
		panelContatosRelacionados.setLayout(null);
		atualizaRelacionaContato((String) listContatosRelacionados
				.getSelectedValue());
	}

	private void panelPesquisaContato() {
		panelPesquisaContatos.setBorder(BorderFactory.createCompoundBorder(
				BorderFactory.createTitledBorder("Relacionar Contato"),
				BorderFactory.createEmptyBorder(5, 5, 5, 5)));

		listContatosPesquisados = new JList(getNomesContatosNaoRelacionados());
		scrollContatosPesquisados = new JScrollPane(listContatosPesquisados);
		listContatosPesquisados
				.addListSelectionListener(new ListSelectionListener() {

					@Override
					public void valueChanged(ListSelectionEvent e) {
						atualizaRelacionaContato((String) listContatosPesquisados
								.getSelectedValue());
					}
				});
		botaoRelacionarContato = new JButton("Relacionar Contato");
		botaoRelacionarContato.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				if (evento.addContato(contatoRelacionado)) {
					removePanels();
					relacionaContatos();
				}
			}
		});
		splitContatosPesquisados = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
				scrollContatosPesquisados, botaoRelacionarContato);
		splitContatosPesquisados.setDividerLocation(250);

		panelPesquisaContatos.add(splitContatosPesquisados);
		splitContatosPesquisados.setBounds(10, 32, 380, 88);

		panelRelacionaContatos.add(panelPesquisaContatos);
		panelRelacionaContatos.repaint();
		atualizaRelacionaContato((String) listContatosPesquisados
				.getSelectedValue());
	}

	private String[] getNomesContatosNaoRelacionados() {
		List<String> nomesContatos = new ArrayList<String>();
		for (Contato contato : usuario.getContatos()) {
			if (!evento.getContatosNoEvento().contains(contato)) {
				nomesContatos.add(contato.getNome());
			}
		}
		return (String[]) nomesContatos
				.toArray(new String[nomesContatos.size()]);
	}

	private void atualizaRelacionaContato(String nomeContato) {
		contatoRelacionado = getContato(nomeContato);
	}

	private String[] contatosRelacionados() {
		String[] contatos = new String[evento.getContatosNoEvento().size()];
		for (int i = 0; i < evento.getContatosNoEvento().size(); i++) {
			Contato contato = evento.getContatosNoEvento().get(i);
			String nome = contato.getNome();
			contatos[i] = nome;
		}
		return contatos;
	}

	private void formasDeContato() {
		panelFormasDeContato = new JPanel(null);
		panelFormasDeContato1 = new JPanel(null);
		tituloFormasDeContato = new JLabel("FORMAS DE CONTATO");
		tituloFormasDeContato.setFont(new java.awt.Font("Segoe UI", 0, 16));
		tituloFormasDeContato.setBounds(123, 5, 229, 22);

		botaoVoltar = new JButton("Voltar");
		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				removePanels();
				menuPrincipal();
				window.repaint();
			}
		});

		if (contato.getFormasDeContato().size() != 0) {
			String[] arrayFormasDeContatos = getNomesFormasDeContatos();
			listNomeFormasDeContatos = new JList(arrayFormasDeContatos);
			listNomeFormasDeContatos.setSelectedIndex(0);
			listNomeFormasDeContatos
					.addListSelectionListener(new ListSelectionListener() {

						@Override
						public void valueChanged(ListSelectionEvent e) {
							// JList list = (JList) e.getSource();
							atualizaPerfilFormasDeContato((String) listNomeFormasDeContatos
									.getSelectedValue());
						}
					});

			JScrollPane scrollNomesFormasDeContatos = new JScrollPane(
					listNomeFormasDeContatos);

			perfilFormasDeContato = new JTextArea();
			JScrollPane scrollPerfilFormasDeContato = new JScrollPane(
					perfilFormasDeContato);

			botaoEditarFormaDeContato = new JButton("Editar");
			botaoRemoverFormaDeContato = new JButton("Remover");
			botaoCriaFormasDeContato = new JButton("Adicionar Forma De Contato");

			botaoEditarFormaDeContato.addActionListener(actionListener4());
			botaoRemoverFormaDeContato.addActionListener(actionListener4());
			botaoCriaFormasDeContato.addActionListener(actionListener4());

			panelPerfilFormasDeContato = new JPanel(null);
			panelPerfilFormasDeContato.setLayout(null);

			panelPerfilFormasDeContato.add(scrollPerfilFormasDeContato);
			panelPerfilFormasDeContato.add(botaoEditarFormaDeContato);
			botaoEditarFormaDeContato.setBounds(0, 175, 106, 25);
			panelPerfilFormasDeContato.add(botaoRemoverFormaDeContato);
			botaoRemoverFormaDeContato.setBounds(111, 174, 115, 25);
			panelPerfilFormasDeContato.add(botaoCriaFormasDeContato);
			botaoCriaFormasDeContato.setBounds(0, 146, 225, 23);
			scrollPerfilFormasDeContato.setBounds(0, 0, 237, 140);

			splitFormasDeContatos = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
					scrollNomesFormasDeContatos, panelPerfilFormasDeContato);
			splitFormasDeContatos.setBounds(0, 2, 395, 215);
			splitFormasDeContatos.setDividerLocation(150);
			splitFormasDeContatos.setOneTouchExpandable(true);
			panelFormasDeContato.removeAll();
			panelFormasDeContato.setSize(436, 334);
			panelFormasDeContato.setLayout(null);
			panelFormasDeContato.add(splitFormasDeContatos);
			scrollFormasDeContato = new JScrollPane(panelFormasDeContato);
			atualizaPerfilFormasDeContato((String) listNomeFormasDeContatos
					.getSelectedValue());
		} else {
			panelFormasDeContato.setSize(379, 199);
			JLabel msg = new JLabel(
					"O contato selecionado ainda não tem nenhuma forma de contato!");
			msg.setBounds(0, 0, 379, 31);
			botaoCriaFormasDeContato = new JButton("Adicionar Forma De Contato");
			botaoCriaFormasDeContato.setBounds(178, 43, 195, 30);
			botaoCriaFormasDeContato.addActionListener(actionListener4());
			panelFormasDeContato.add(msg);
			panelFormasDeContato.add(botaoCriaFormasDeContato);
			scrollFormasDeContato = new JScrollPane(panelFormasDeContato);
		}
		removePanels();
		panelFormasDeContato1.add(tituloFormasDeContato);
		panelFormasDeContato1.add(scrollFormasDeContato);
		panelFormasDeContato1.add(botaoVoltar);
		botaoVoltar.setBounds(315, 271, 95, 22);
		scrollFormasDeContato.setBounds(18, 44, 392, 215);
		window.add(panelFormasDeContato1);
		panelFormasDeContato1.setBounds(-1, 28, 436, 328);
		panelFormasDeContato1.setLayout(null);

		redimensionaJanela();
		window.repaint();

	}

	private ActionListener actionListener4() {
		return new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				
				if (e.getSource() == botaoEditarFormaDeContato) {
					formaDeContato = getFormaDeContato((String) listNomeFormasDeContatos
							.getSelectedValue());
					removePanels();
					editarFormaDeContato();
				}
				if (e.getSource() == botaoRemoverFormaDeContato) {
					formaDeContato = getFormaDeContato((String) listNomeFormasDeContatos
							.getSelectedValue());
					contato.removeFormaDeContato(formaDeContato);
					removePanels();
					formasDeContato();
				}
				if (e.getSource() == botaoCriaFormasDeContato) {
					removePanels();
					window.repaint();
					adicionaFormaDeContato();
				}
			}
		};
	}

	private void editarFormaDeContato() {
		panelEditarFormaDeContato = new JPanel(null);
		tituloEditarFormaDeContato = new JLabel("EDITAR FORMA DE CONTATO");
		tituloEditarFormaDeContato.setBounds(110, 8, 193, 28);
		tituloEditarFormaDeContato.setFont(new java.awt.Font("Segoe UI", 0,
				16));
		if (formaDeContato instanceof Telefone) {
			panelTelefone = new JPanel(null);
			labelNumero = new JLabel("Número");
			numero = new JTextField(formaDeContato.getEndereco());
			labelComentario = new JLabel("Comentário");
			comentario = new JTextField(formaDeContato.getComentario());

			botaoOk = new JButton("Ok");
			botaoOk.addMouseListener(new MouseListener() {

				@Override
				public void mouseReleased(MouseEvent arg0) {
				}

				@Override
				public void mousePressed(MouseEvent arg0) {
				}

				@Override
				public void mouseExited(MouseEvent arg0) {
				}

				@Override
				public void mouseEntered(MouseEvent arg0) {
				}

				@Override
				public void mouseClicked(MouseEvent arg0) {
					try {
						formaDeContato.setEndereco(numero.getText());
						formaDeContato.setComentario(comentario.getText());
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null, e.getMessage(),
								"Erro", 0);
					}
					removePanels();
					formasDeContato();
					window.repaint();
				}
			});

			panelTelefone.add(labelNumero);
			labelNumero.setBounds(20, 12, 144, 19);
			panelTelefone.add(numero);
			numero.setBounds(20, 37, 142, 23);
			panelTelefone.add(labelComentario);
			labelComentario.setBounds(20, 78, 144, 16);
			panelTelefone.add(comentario);
			comentario.setBounds(20, 100, 300, 25);
			panelTelefone.add(botaoOk);
			botaoOk.setBounds(205, 137, 78, 25);
			botaoVoltar = new JButton("Cancelar");
			panelTelefone.add(botaoVoltar);
			botaoVoltar.setBounds(288, 137, 99, 25);
			actionBotaoVoltar();

			panelEditarFormaDeContato.add(panelTelefone);
			panelEditarFormaDeContato.add(tituloEditarFormaDeContato);
			tituloEditarFormaDeContato.setBounds(79, 80, 290, 23);
			panelEditarFormaDeContato.setLayout(null);
			panelEditarFormaDeContato.setSize(436, 334);
			panelEditarFormaDeContato.setPreferredSize(new java.awt.Dimension(
					436, 334));
			panelEditarFormaDeContato.setBounds(0, 0, 436, 334);

			panelTelefone.setBounds(12, 118, 399, 173);
			panelTelefone.setLayout(null);
			removePanels();
			window.add(panelEditarFormaDeContato);
			window.repaint();
		} else if (formaDeContato instanceof Email) {
			panelEmail = new JPanel(null);

			labelEndereco = new JLabel("Endereço de e-mail");
			enderecoEmail = new JTextField(formaDeContato.getEndereco());
			labelComentario = new JLabel("Comentário");
			comentario = new JTextField(formaDeContato.getComentario());

			botaoOk = new JButton("Ok");
			botaoOk.addMouseListener(new MouseListener() {

				@Override
				public void mouseReleased(MouseEvent arg0) {
				}

				@Override
				public void mousePressed(MouseEvent arg0) {
				}

				@Override
				public void mouseExited(MouseEvent arg0) {
				}

				@Override
				public void mouseEntered(MouseEvent arg0) {
				}

				@Override
				public void mouseClicked(MouseEvent arg0) {
					try {
						formaDeContato.setEndereco(enderecoEmail.getText());
						formaDeContato.setComentario(comentario.getText());
					} catch (Exception e) {
						JOptionPane.showMessageDialog(null, e.getMessage(),
								"Erro", 0);
					}
					removePanels();
					formasDeContato();
					window.repaint();
				}
			});

			panelEmail.add(labelEndereco);
			labelEndereco.setBounds(20, 12, 144, 19);
			panelEmail.add(enderecoEmail);
			enderecoEmail.setBounds(20, 37, 142, 23);
			panelEmail.add(labelComentario);
			labelComentario.setBounds(20, 78, 144, 16);
			panelEmail.add(comentario);
			comentario.setBounds(20, 100, 300, 25);
			panelEmail.add(botaoOk);
			botaoOk.setBounds(205, 137, 78, 25);
			botaoVoltar = new JButton("Cancelar");
			panelEmail.add(botaoVoltar);
			botaoVoltar.setBounds(288, 137, 99, 25);
			actionBotaoVoltar();

			panelEditarFormaDeContato.add(panelEmail);
			panelEditarFormaDeContato.add(tituloEditarFormaDeContato);
			tituloEditarFormaDeContato.setBounds(79, 80, 290, 23);
			panelEditarFormaDeContato.setLayout(null);
			panelEditarFormaDeContato.setSize(436, 334);
			panelEditarFormaDeContato.setPreferredSize(new java.awt.Dimension(
					436, 334));
			panelEditarFormaDeContato.setBounds(0, 0, 436, 334);

			panelEmail.setBounds(12, 118, 399, 173);
			panelEmail.setLayout(null);
			removePanels();
			window.add(panelEditarFormaDeContato);
			window.repaint();

		}
		else {
			panelOutro = new JPanel(null);

			labelTipo = new JLabel("Tipo");
			tipo = new JTextField(formaDeContato.getNome());
			labelEndereco = new JLabel("Endereço");
			enderecoOutro = new JTextField(formaDeContato.getEndereco());
			labelComentario = new JLabel("Comentário");
			comentario = new JTextField(formaDeContato.getComentario());

			botaoOk = new JButton("Ok");
			botaoOk.addMouseListener(new MouseListener() {

				@Override
				public void mouseReleased(MouseEvent arg0) {
				}

				@Override
				public void mousePressed(MouseEvent arg0) {
				}

				@Override
				public void mouseExited(MouseEvent arg0) {
				}

				@Override
				public void mouseEntered(MouseEvent arg0) {
				}

				@Override
				public void mouseClicked(MouseEvent arg0) {
						try {
							formaDeContato.setNome(tipo.getText());
							formaDeContato.setEndereco(enderecoOutro.getText());
							formaDeContato.setComentario(comentario.getText());
						} catch (Exception e) {
							JOptionPane.showMessageDialog(null, e.getMessage(),
									"Erro", 0);
						}
						removePanels();
						formasDeContato();
						window.repaint();
				}
				
			});
			botaoVoltar = new JButton("Cancelar");
			actionBotaoVoltar();

			panelOutro.add(labelTipo);
			labelTipo.setBounds(20, 5, 86, 17);
			panelOutro.add(tipo);
			tipo.setBounds(20, 25, 119, 21);
			panelOutro.add(labelEndereco);
			labelEndereco.setBounds(143, 5, 86, 17);
			panelOutro.add(enderecoOutro);
			enderecoOutro.setBounds(143, 25, 251, 23);
			panelOutro.add(labelComentario);
			labelComentario.setBounds(20, 78, 144, 16);
			panelOutro.add(comentario);
			comentario.setBounds(20, 100, 300, 25);
			panelOutro.add(botaoOk);
			botaoOk.setBounds(205, 137, 78, 25);
			panelOutro.add(botaoVoltar);
			botaoVoltar.setBounds(288, 137, 99, 25);
			
			panelEditarFormaDeContato.add(panelOutro);
			panelEditarFormaDeContato.add(tituloEditarFormaDeContato);
			tituloEditarFormaDeContato.setBounds(79, 80, 290, 23);
			panelEditarFormaDeContato.setLayout(null);
			panelEditarFormaDeContato.setSize(436, 334);
			panelEditarFormaDeContato.setPreferredSize(new java.awt.Dimension(
					436, 334));
			panelEditarFormaDeContato.setBounds(0, 0, 436, 334);

			panelOutro.setBounds(12, 118, 399, 173);
			panelOutro.setLayout(null);
			removePanels();
			window.add(panelEditarFormaDeContato);
			window.repaint();
		}

	}

	private void editarContato() {
		panelEditarContato = new JPanel(null);

		tituloEditarContato = new JLabel("EDITAR CONTATO");
		tituloEditarContato.setBounds(110, 8, 193, 28);
		tituloEditarContato.setFont(new java.awt.Font("Segoe UI", 0, 16));

		labelNome = new JLabel("Nome");
		labelNome.setBounds(12, 47, 66, 16);
		nome = new JTextField(contato.getNome());
		nome.setBounds(12, 69, 244, 23);

		labelEndereco = new JLabel("Endereço");
		labelEndereco.setBounds(12, 104, 98, 18);

		endereco = new JTextArea(contato.getEndereco());
		endereco.setLineWrap(true);
		endereco.setWrapStyleWord(true);
		endereco.setPreferredSize(new java.awt.Dimension(370, 62));
		endereco.setSize(370, 62);
		scrollEndereco = new JScrollPane(endereco);
		scrollEndereco.setBounds(12, 128, 388, 65);

		labelDataAniversario = new JLabel(
				"Data de Aniversário (Formato: DD/MM)");
		labelDataAniversario.setBounds(13, 199, 295, 19);
		dataAniversario = new JTextField(
				getDataFormatadaAniversario((contato.getAniversario().getTime())));
		dataAniversario.setBounds(12, 224, 98, 25);

		botaoOk = new JButton("Ok");
		botaoOk.setBounds(248, 261, 55, 23);
		botaoVoltar = new JButton("Voltar");
		botaoVoltar.setBounds(308, 261, 91, 23);

		panelEditarContato.setLayout(null);
		panelEditarContato.setSize(436, 334);
		panelEditarContato.setPreferredSize(new java.awt.Dimension(436, 334));
		panelEditarContato.setBounds(0, 0, 436, 334);

		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					contato.setNome(nome.getText());
					contato.setEndereco(endereco.getText());
					contato.setAniversario(
							Integer.parseInt(dataAniversario.getText().split(
									"/")[0]),
							Integer.parseInt(dataAniversario.getText().split(
									"/")[1]));
					window.remove(panelEditarContato);
					window.repaint();
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, e.getMessage());
					editarContato();
				}
				menuPrincipal();
			}
		});

		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				window.remove(panelEditarContato);
				window.repaint();
				menuPrincipal();

			}
		});

		removePanels();
		menuEditarContato();
		redimensionaJanela();
		window.repaint();
	}

	private String[] getNomesFormasDeContatos() {
		String[] nomesFormasDeContatos = new String[contato
				.getFormasDeContato().size()];
		for (int i = 0; i < nomesFormasDeContatos.length; i++) {
			nomesFormasDeContatos[i] = contato.getFormasDeContato().get(i)
					.getNome();
		}
		return nomesFormasDeContatos;
	}

	private void atualizaPerfilFormasDeContato(String nomeFormaDeContato) {
		FormaDeContato formaDeContato = getFormaDeContato(nomeFormaDeContato);
		if (formaDeContato != null) {
			perfilFormasDeContato
					.setText(perfilFormaDeContato((FormaDeContato) formaDeContato));
		} else {
			perfilFormasDeContato
					.setText("ERRO - Forma de Contato não encontrado");
		}
		perfilFormasDeContato.setEditable(false);
	}

	private FormaDeContato getFormaDeContato(String nomeFormaDeContato) {
		FormaDeContato formaDeContato = null;
		for (FormaDeContato fc : contato.getFormasDeContato()) {
			if (fc.getNome().equals(nomeFormaDeContato))
				formaDeContato = fc;
		}
		return formaDeContato;
	}

	private void atualizaPerfilContato(String nomeContato) {
		Contato contato = getContato(nomeContato);
		if (contato != null) {
			perfilContato.setText(perfilContato((Contato) contato));
		} else {
			perfilContato.setText("ERRO - Contato não encontrado");
		}
		perfilContato.setEditable(false);
	}

	private Contato getContato(String nomeContato) {
		Contato contato = null;
		for (Contato c : usuario.getContatos()) {
			if (c.getNome().equals(nomeContato))
				contato = c;
		}
		return contato;
	}

	private String perfilFormaDeContato(FormaDeContato formaDeContato) {
		return "Tipo:\n" + formaDeContato.getNome() + "\n\nEndereço:\n"
				+ formaDeContato.getEndereco() + "\n\nComentário:\n"
				+ formaDeContato.getComentario();
	}

	private String perfilContato(Contato contato) {
		return "Nome:\n"
				+ contato.getNome()
				+ "\n\nEndereço:\n"
				+ contato.getEndereco()
				+ "\n\nData de Aniversário:\n"
				+ getDataFormatadaAniversario(contato.getAniversario()
						.getTime());
	}

	private void criaContato() {
		panelCriarContato = new JPanel(null);

		tituloCriarContato = new JLabel("CRIAR NOVO CONTATO");
		tituloCriarContato.setBounds(110, 8, 193, 28);
		tituloCriarContato.setFont(new java.awt.Font("Segoe UI", 0, 16));

		labelNome = new JLabel("Nome");
		labelNome.setBounds(12, 47, 66, 16);
		nome = new JTextField();
		nome.setBounds(12, 69, 244, 23);

		labelEndereco = new JLabel("Endereço");
		labelEndereco.setBounds(12, 104, 98, 18);

		endereco = new JTextArea();
		endereco.setLineWrap(true);
		endereco.setWrapStyleWord(true);
		endereco.setPreferredSize(new java.awt.Dimension(370, 62));
		endereco.setSize(370, 62);
		scrollEndereco = new JScrollPane(endereco);
		scrollEndereco.setBounds(12, 128, 388, 65);

		labelDataAniversario = new JLabel(
				"Data de Aniversário (Formato: DD/MM)");
		labelDataAniversario.setBounds(13, 199, 295, 19);
		dataAniversario = new JTextField();
		dataAniversario.setBounds(12, 224, 98, 25);

		botaoOk = new JButton("Ok");
		botaoOk.setBounds(248, 261, 55, 23);
		botaoVoltar = new JButton("Voltar");
		botaoVoltar.setBounds(308, 261, 91, 23);

		panelCriarContato.setLayout(null);
		panelCriarContato.setSize(436, 334);
		panelCriarContato.setPreferredSize(new java.awt.Dimension(436, 334));
		panelCriarContato.setBounds(0, 0, 436, 334);

		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				contato = addContato();
				if (contato != null) {
					window.remove(panelCriarContato);
					window.repaint();
					adicionaFormaDeContato();
				}
			}
		});

		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				window.remove(panelCriarContato);
				window.repaint();
				menuPrincipal();

			}
		});

		menuCriarContato();
		redimensionaJanela();
		window.repaint();
	}

	private void menuCriarContato() {
		panelCriarContato.add(tituloCriarContato);
		panelCriarContato.add(labelNome);
		panelCriarContato.add(nome);
		panelCriarContato.add(labelEndereco);
		panelCriarContato.add(scrollEndereco);
		panelCriarContato.add(labelDataAniversario);
		panelCriarContato.add(dataAniversario);
		panelCriarContato.add(botaoOk);
		panelCriarContato.add(botaoVoltar);

		window.add(panelCriarContato);
		window.repaint();
	}

	private void menuEditarContato() {
		panelEditarContato.add(tituloEditarContato);
		panelEditarContato.add(labelNome);
		panelEditarContato.add(nome);
		panelEditarContato.add(labelEndereco);
		panelEditarContato.add(scrollEndereco);
		panelEditarContato.add(labelDataAniversario);
		panelEditarContato.add(dataAniversario);
		panelEditarContato.add(botaoOk);
		panelEditarContato.add(botaoVoltar);

		window.add(panelEditarContato);
		window.repaint();
	}

	private Contato addContato() {
		try {
			String nome = this.nome.getText();
			String endereco = this.endereco.getText();
			String[] dataAniversario = this.dataAniversario.getText()
					.split("/");
			Contato contato = new Contato(nome, endereco,
					Integer.parseInt(dataAniversario[0]),
					Integer.parseInt(dataAniversario[1]));
			usuario.addContato(contato);
			return contato;
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "Entrada inválida", "Erro", 0);
			return null;
		}
	}

	private void adicionaFormaDeContato() {
		panelAddFormaDeContato = new JPanel(null);

		tituloAddFormaDeContato = new JLabel("ADICIONAR NOVA FORMA DE CONTATO");
		tituloAddFormaDeContato.setFont(new java.awt.Font("Segoe UI", 0, 16));

		panelSelecaoFormaDeContato = new JPanel(null);
		panelSelecaoFormaDeContato.setBorder(BorderFactory
				.createCompoundBorder(BorderFactory.createTitledBorder("Tipo"),
						BorderFactory.createEmptyBorder(5, 5, 5, 5)));

		tipoTelefone = new JRadioButton("Telefone");
		tipoTelefone.setActionCommand("Telefone");
		tipoTelefone.addActionListener(actionListener2());

		tipoEmail = new JRadioButton("E-mail");
		tipoEmail.setActionCommand("E-mail");
		tipoEmail.addActionListener(actionListener2());

		tipoOutro = new JRadioButton("Outro");
		tipoOutro.setActionCommand("Outro");
		tipoOutro.addActionListener(actionListener2());

		tiposFormaDeContato = new ButtonGroup();
		tiposFormaDeContato.add(tipoTelefone);
		tiposFormaDeContato.add(tipoEmail);
		tiposFormaDeContato.add(tipoOutro);

		panelSelecaoFormaDeContato.add(tipoTelefone);
		tipoTelefone.setBounds(22, 23, 110, 18);
		panelSelecaoFormaDeContato.add(tipoEmail);
		tipoEmail.setBounds(132, 23, 116, 18);
		panelSelecaoFormaDeContato.add(tipoOutro);
		tipoOutro.setBounds(253, 23, 116, 18);

		panelAddFormaDeContato.add(panelSelecaoFormaDeContato);
		panelSelecaoFormaDeContato.setBounds(12, 71, 411, 51);
		panelSelecaoFormaDeContato.setLayout(null);
		panelAddFormaDeContato.add(tituloAddFormaDeContato);
		tituloAddFormaDeContato.setBounds(31, 12, 380, 37);

		window.add(panelAddFormaDeContato);
		panelAddFormaDeContato.setBounds(0, 0, 435, 328);
		panelAddFormaDeContato.setLayout(null);
		window.repaint();
	}

	private ActionListener actionListener2() {
		return new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				String tipo = e.getActionCommand();
				if (tipo.equals("Telefone")) {
					panelTelefone();
				}
				if (tipo.equals("E-mail")) {
					panelEmail();
				}
				if (tipo.equals("Outro")) {
					panelOutro();
				}
				if (tipo.equals("Áudio")) {
					// panelAudio();
				}
				if (tipo.equals("Imagem")) {
					new MainImagem();
					removePanels();
					menuPrincipal();
				}

			}
		};
	}

	private void panelTelefone() {
		panelTelefone = new JPanel(null);

		labelNumero = new JLabel("Número");
		numero = new JTextField();
		labelComentario = new JLabel("Comentário");
		comentario = new JTextField();

		botaoOk = new JButton("Ok");
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				FormaDeContato telefone = null;
				try {
					telefone = new Telefone(numero.getText(), comentario
							.getText());
					contato.addFormaDeContato(telefone);
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
							0);
				}
				removePanels();
				menuPrincipal();
				window.repaint();
			}
		});

		panelTelefone.add(labelNumero);
		labelNumero.setBounds(20, 12, 99, 19);
		panelTelefone.add(numero);
		numero.setBounds(20, 37, 142, 23);
		panelTelefone.add(labelComentario);
		labelComentario.setBounds(20, 78, 144, 16);
		panelTelefone.add(comentario);
		comentario.setBounds(20, 100, 300, 25);
		panelTelefone.add(botaoOk);
		botaoOk.setBounds(205, 137, 78, 25);
		botaoVoltar = new JButton("Cancelar");
		panelTelefone.add(botaoVoltar);
		botaoVoltar.setBounds(288, 137, 99, 25);
		actionBotaoVoltar();

		removePanelsFormasDeContato();
		panelAddFormaDeContato.add(panelTelefone);
		panelTelefone.setBounds(12, 118, 399, 173);
		panelTelefone.setLayout(null);

	}

	private void actionBotaoVoltar() {
		botaoVoltar.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent e) {
			}

			@Override
			public void mousePressed(MouseEvent e) {
			}

			@Override
			public void mouseExited(MouseEvent e) {
			}

			@Override
			public void mouseEntered(MouseEvent e) {
			}

			@Override
			public void mouseClicked(MouseEvent e) {
				removePanels();
				menuPrincipal();
				window.repaint();
			}
		});
	}

	private void panelEmail() {
		panelEmail = new JPanel(null);

		labelEndereco = new JLabel("Endereço de e-mail");
		enderecoEmail = new JTextField();
		labelComentario = new JLabel("Comentário");
		comentario = new JTextField();

		botaoOk = new JButton("Ok");
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					FormaDeContato email = new Email(enderecoEmail.getText(),
							comentario.getText());
					contato.addFormaDeContato(email);
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
							0);
					panelEmail();
				}
				removePanels();
				menuPrincipal();
				window.repaint();
			}
		});
		botaoVoltar = new JButton("Cancelar");
		actionBotaoVoltar();

		panelEmail.add(labelEndereco);
		labelEndereco.setBounds(20, 12, 176, 19);
		panelEmail.add(enderecoEmail);
		enderecoEmail.setBounds(20, 37, 142, 23);
		panelEmail.add(labelComentario);
		labelComentario.setBounds(20, 78, 144, 16);
		panelEmail.add(comentario);
		comentario.setBounds(20, 100, 300, 25);
		panelEmail.add(botaoOk);
		botaoOk.setBounds(205, 137, 78, 25);
		panelEmail.add(botaoVoltar);
		botaoVoltar.setBounds(288, 137, 99, 25);

		removePanelsFormasDeContato();
		panelAddFormaDeContato.add(panelEmail);
		panelEmail.setBounds(12, 118, 399, 173);
		panelEmail.setLayout(null);

	}

	private void panelOutro() {
		panelOutro = new JPanel(null);

		labelTipo = new JLabel("Tipo");
		tipo = new JTextField();
		labelEndereco = new JLabel("Endereço");
		enderecoOutro = new JTextField();
		labelComentario = new JLabel("Comentário");
		comentario = new JTextField();

		botaoOk = new JButton("Ok");
		botaoOk.addMouseListener(new MouseListener() {

			@Override
			public void mouseReleased(MouseEvent arg0) {
			}

			@Override
			public void mousePressed(MouseEvent arg0) {
			}

			@Override
			public void mouseExited(MouseEvent arg0) {
			}

			@Override
			public void mouseEntered(MouseEvent arg0) {
			}

			@Override
			public void mouseClicked(MouseEvent arg0) {
				try {
					contato.addFormaDeContato(new FormaDeContato(
							tipo.getText(), enderecoOutro.getText(), comentario
									.getText()));
				} catch (Exception e) {
					JOptionPane.showMessageDialog(null, "Entrada inválida",
							"Erro", 0);
					panelOutro();
				}
				removePanels();
				menuPrincipal();
				window.repaint();
			}
		});
		botaoVoltar = new JButton("Cancelar");
		actionBotaoVoltar();

		panelOutro.add(labelTipo);
		labelTipo.setBounds(20, 5, 86, 17);
		panelOutro.add(tipo);
		tipo.setBounds(20, 25, 119, 21);
		panelOutro.add(labelEndereco);
		labelEndereco.setBounds(143, 5, 86, 17);
		panelOutro.add(enderecoOutro);
		enderecoOutro.setBounds(143, 25, 251, 23);
		panelOutro.add(labelComentario);
		labelComentario.setBounds(20, 78, 144, 16);
		panelOutro.add(comentario);
		comentario.setBounds(20, 100, 300, 25);
		panelOutro.add(botaoOk);
		botaoOk.setBounds(205, 137, 78, 25);
		panelOutro.add(botaoVoltar);
		botaoVoltar.setBounds(288, 137, 99, 25);

		removePanelsFormasDeContato();
		panelAddFormaDeContato.add(panelOutro);
		panelOutro.setBounds(12, 118, 399, 173);
		panelOutro.setLayout(null);
	}

	private String[] getNomesContatos() {
		String[] nomesContatos = new String[usuario.getContatos().size()];
		for (int i = 0; i < usuario.getContatos().size(); i++) {
			nomesContatos[i] = usuario.getContatos().get(i).getNome();
		}
		return nomesContatos;
	}

	private JMenu getMenuPerfil() {
		if (barMenuPerfil == null) {
			barMenuPerfil = new JMenu();
			barMenuPerfil.setText("Perfil");
			barMenuPerfil.add(getMenuItemEditarPerfil());
			barMenuPerfil.add(getItemMenuPrincipal());
		}
		return barMenuPerfil;
	}

	private JMenu getMenuContatos() {
		if (barMenuContatos == null) {
			barMenuContatos = new JMenu();
			barMenuContatos.setText("Contatos");
			barMenuContatos.add(getMenuItemCriarContato());
		}
		return barMenuContatos;
	}

	private JMenu getMenuEventos() {
		if (barMenuEventos == null) {
			barMenuEventos = new JMenu();
			barMenuEventos.setText("Eventos");
			barMenuEventos.add(getMenuItemCriarEvento());
		}
		return barMenuEventos;
	}

	private JMenuItem getMenuItemEditarPerfil() {
		if (menuItemEditarPerfil == null) {
			menuItemEditarPerfil = new JMenuItem();
			menuItemEditarPerfil.setText("Editar Perfil");
		}
		menuItemEditarPerfil.addActionListener(actionListener1());
		return menuItemEditarPerfil;
	}

	private JMenuItem getMenuItemCriarContato() {
		if (menuItemCriarContato == null) {
			menuItemCriarContato = new JMenuItem();
			menuItemCriarContato.setText("Criar Novo Contato");
		}
		menuItemCriarContato.addActionListener(actionListener1());
		return menuItemCriarContato;
	}

	private JMenuItem getMenuItemCriarEvento() {
		if (menuItemCriarEvento == null) {
			menuItemCriarEvento = new JMenuItem();
			menuItemCriarEvento.setText("Criar Novo Evento");
		}
		menuItemCriarEvento.addActionListener(actionListener1());
		return menuItemCriarEvento;
	}

	private JMenuItem getItemMenuPrincipal() {
		if (menuItemMenuPrincipal == null) {
			menuItemMenuPrincipal = new JMenuItem();
			menuItemMenuPrincipal.setText("Menu Principal");
		}
		menuItemMenuPrincipal.addActionListener(actionListener1());
		return menuItemMenuPrincipal;
	}

	private ActionListener actionListener1() {
		return new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				if (e.getSource() == menuItemEditarPerfil) {
					removePanels();
					menuEditarPerfil();
				}

				if (e.getSource() == menuItemCriarContato) {
					removePanels();
					criaContato();
				}

				if (e.getSource() == menuItemCriarEvento) {
					removePanels();
					criaEvento();
				}
				if (e.getSource() == menuItemMenuPrincipal) {
					removePanels();
					menuPrincipal();
				}
			}
		};
	}

	private String getDataFormatada(Date data) {
		try {
			return simpleDateFormat.format(data);
		} catch (Exception e) {
			return null;
		}
	}

	private String getDataFormatadaAniversario(Date data) {
		try {
			return simpleDateFormatAniversario.format(data);
		} catch (Exception e) {
			return null;
		}
	}

	private String getHoraFormatada(Date data) {
		try {
			return simpleTimeFormat.format(data);
		} catch (Exception e) {
			return null;
		}
	}

	private void removePanelsFormasDeContato() {
		if (panelTelefone != null)
			panelAddFormaDeContato.remove(panelTelefone);
		if (panelEmail != null)
			panelAddFormaDeContato.remove(panelEmail);
		if (panelOutro != null)
			panelAddFormaDeContato.remove(panelOutro);
	}

	private void removePanels() {
		if (panelCriarContato != null)
			window.remove(panelCriarContato);
		if (panelCriarEvento != null)
			window.remove(panelCriarEvento);
		if (panelMenuPrincipal != null)
			window.remove(panelMenuPrincipal);
		if (panelAddFormaDeContato != null)
			window.remove(panelAddFormaDeContato);
		if (panelFormasDeContato1 != null)
			window.remove(panelFormasDeContato1);
		if (panelEditarEvento != null)
			window.remove(panelEditarEvento);
		if (panelEditarContato != null)
			window.remove(panelEditarContato);
		if (panelRelacionaContatos != null)
			window.remove(panelRelacionaContatos);
		if (panelAddAnotacao != null)
			window.remove(panelAddAnotacao);
		if (panelCriarEditarPerfil != null)
			window.remove(panelCriarEditarPerfil);
		if (panelEditarFormaDeContato != null)
			window.remove(panelEditarFormaDeContato);
	}

	private void redimensionaJanela() {
		if (window.getHeight() == 390)
			window.setSize(452, 391);
		else
			window.setSize(452, 390);
	}

	private void finalizacao() {
		try {
			FileOutputStream fo = new FileOutputStream("Usuario.dat");
			ObjectOutputStream oo = new ObjectOutputStream(fo);
			oo.writeObject(usuario);
			oo.close();
		} catch (Exception e) {
			finalizacao();
		}
	}

}
